package pe.com.astech.web.service;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import pe.com.astech.web.bean.DetalleOrdenPedido;
import pe.com.astech.web.bean.OrdenPedidoBean;
import pe.com.astech.web.bean.OrdenTrabajoBean;
import pe.com.astech.web.dao.OrdenPedidoDao;
import pe.com.astech.web.util.Constantes;

@Service
public class OrdenPedidoServiceImpl implements OrdenPedidoService {

	@Autowired
	public OrdenPedidoDao ordenPedidoDao;
	
	private static final Log log = LogFactory.getLog(OrdenPedidoServiceImpl.class);

	@Override
	public List<String> buscarOrdenPedido(String mensajeTrazabilidad,
			String nroOrden) {
		
		List<OrdenPedidoBean> list = ordenPedidoDao.buscarOrdenPedido(mensajeTrazabilidad, nroOrden);
		
		String[] arrayOrdenPedido = new String[(list!=null)?list.size():Constantes.intCERO];
		List<String> listString = new ArrayList<String>();
		
		if(list!=null){
			log.info(mensajeTrazabilidad + " tamanio del arreglo " + arrayOrdenPedido.length);
			for(int i=0;i<list.size();i++){
				
				arrayOrdenPedido[i] = list.get(i).getNro_orden() + "-" +list.get(i).getRazon_social();
				log.info(mensajeTrazabilidad + " item [" + i + "] = " + arrayOrdenPedido[i]);
				listString.add(list.get(i).getNro_orden() + "-" +list.get(i).getRazon_social());
			}
		}
		
		return listString;
	}

	@Override
	public List<OrdenPedidoBean> obtenerPedidosLibres(String mensajeTrazabilidad) {		
				
		List<OrdenPedidoBean> list = ordenPedidoDao.obtenerPedidosProceso(mensajeTrazabilidad);
		List<DetalleOrdenPedido> listDetalleOP = ordenPedidoDao.obtenerDetallePedidosProceso(mensajeTrazabilidad);
		
		List<OrdenPedidoBean> listEliminados = new ArrayList<OrdenPedidoBean>();
		
		for(OrdenPedidoBean bean:list){
			int iteraciones = Constantes.intCERO;
			log.info(mensajeTrazabilidad + " cantidad " + bean.getCantidad());
			int cantidad = Double.valueOf(bean.getCantidad()).intValue();
			for(DetalleOrdenPedido beanDetalle:listDetalleOP){
				if(bean.getId_orden_pedido().equals(beanDetalle.getOrden_pedido_ID()) && bean.getMaquinaria_ID().equals(beanDetalle.getMaquinaria_ID())){
					log.info(mensajeTrazabilidad + " bean.getId_orden_pedido() " + bean.getId_orden_pedido());
					log.info(mensajeTrazabilidad + " bean.getmaquinaria_ID() " + bean.getMaquinaria_ID());
					iteraciones ++;
				} 
			}
			log.info(mensajeTrazabilidad + " iteraciones " + iteraciones);
			if(cantidad==iteraciones){
				listEliminados.add(bean);
			}
		}
		list.removeAll(listEliminados);
		
		return list;
	}

	@Override
	public List<OrdenPedidoBean> obtenerPedidosLibresYModificados(
			String mensajeTrazabilidad, OrdenTrabajoBean ordenTrabajoBean) {

		List<OrdenPedidoBean> list = obtenerPedidosLibres(mensajeTrazabilidad);
		boolean b = true;
		
		for(OrdenPedidoBean bean:list){
			if(bean.getMaquinaria_ID().equals(ordenTrabajoBean.getMaquinaria_ID()) && bean.getId_orden_pedido().equals(ordenTrabajoBean.getOrden_pedido_ID())){
				b = false;
			}
		}
		
		if(b){
			OrdenPedidoBean bean = new OrdenPedidoBean();
			bean.setId_orden_pedido(ordenTrabajoBean.getOrden_pedido_ID());
			bean.setMaquinaria_ID(ordenTrabajoBean.getMaquinaria_ID());
			bean.setModelo_maquinaria(ordenTrabajoBean.getModelo_maquinaria());
			bean.setNombre_maquinaria(ordenTrabajoBean.getNombre_maquinaria());
			bean.setNro_orden(ordenTrabajoBean.getNro_orden_pedido());
			bean.setRazon_social(ordenTrabajoBean.getRazon_social());
			list.add(bean);
		}
		
		return list;
	}
	
	
}
